<?php

/*
 * @fileName       : Lvc.php
 * @Copyright      : (c) 2012 Chienlv.
 * @Blog           : levanchien.info.
 * @Yahoo          : levanchien_info.
 * @Email          : admin@levanchien.info.
 * @Mobile         : 0989092938.
 * @Description of : Lvc
 */

class Lvc {
    const CACHE_TIME = 3600;
    const HOT = 1;
    const NO_HOT = 0;

    const BLOGSPOT_ENABLED = 0;     //  chưa post lên blogger
    const BLOGSPOT_DISABLED = 1;    //  đã post lên blogger
    
    static function blogspotArray($label = '') {
        $array = array();
        if ($label)$array[''] = $label;
        $array[self::BLOGSPOT_ENABLED] = Yii::t('Global', 'Blogspot enabled');
        $array[self::BLOGSPOT_DISABLED] = Yii::t('Global', 'Blogspot disabled');
        return $array;
    }
    public function blogspotName($hot) {
        $array = self::blogspotArray();
        return $array[$hot];
    }
    
    static function hotArray($label = '') {
        $array = array();
        if ($label)$array[''] = $label;
        $array[self::HOT] = Yii::t('Global', 'Hot');
        $array[self::NO_HOT] = Yii::t('Global', 'No hot');
        return $array;
    }

    public function hotName($hot) {
        $array = self::hotArray();
        return $array[$hot];
    }

    public function htmlHot($data) {
        $html = "";
        if ($data) {
            if ($data->is_hot == self::HOT) {
                $html = CHtml::image(Yii::app()->request->baseUrl . "/css/admin/images/tick.png", "enabled", array("class" => 'icon-hot', "name" => $data->id));
            } else if ($data->is_hot == self::NO_HOT) {
                $html = CHtml::image(Yii::app()->request->baseUrl . "/css/admin/images/publish_x.png", "disabled", array("class" => 'icon-hot', "name" => $data->id));
            }
        }
        return $html;
    }

    /*
     * @TODO : STATUS_ENABLED (Hiển thị)
     * @TODO : STATUS_DISABLED (Không hiển thị)
     */

    const STATUS_ENABLED = 0;
    const STATUS_DISABLED = 1;
    const STATUS_DELETE = 2;
    const STATUS_NOT_APPROVED = 0;
    const STATUS_IS_APPROVED = 1;

    /*
     * @TODO : Mảng status dung chung trong hệ thống.
     */

    static function statusArray($label = '') {
        $status = array(
            self::STATUS_ENABLED => Yii::t('Global', 'Enabled'),
            self::STATUS_DISABLED => Yii::t('Global', 'Disabled'),
            self::STATUS_DELETE => Yii::t('Global', 'Xóa'),
        );
        if (!empty($label))
            return array_merge(array('' => $label), $status);
        return $status;
    }

    /*
     * @TODO : Lấy tên status
     *          - Hiển thị
     *          - Tắt
     */

    public function getStatusName($status) {
        $array = self::statusArray();
        return $array[$status];
    }

    /*
     * @TODO : Hàm trả về bộ nhớ sử dụng của Yii fw
     */

    public static function memoryUser() {
        return Yii::getLogger()->getMemoryUsage();
    }

    /*
     * @TODO : Hàm trả về thời gian tải trang
     */

    public static function executionTime() {
        return Yii::getLogger()->getExecutionTime();
    }

    /*
     * @TODO : Hàm trả về random 
     */

    public static function randomKeys($len) {
        $output = '';
        for ($i = 0; $i < $len; $i++) {
            $output .= chr(mt_rand(33, 126));
        }
        return $output;
    }
    /**
     * @return          :   Hàm chuyển đổi từ mktime sang ngày
     * @var $mktime     :   string mktime
     * @var $dateType   :   Định dạng ngày
     */
    public static function mktimeToDate($mktime, $dateType = "d-m-Y") {
        return date($dateType, $mktime);
    }

    /**
     * @author      :   Chienlv
     * @return      :   Trả về string mktime
     * @example     :   Lvc::getMkTime();
     */
    public static function getMkTime() {
        return time();
    }

    /**
     * @return Hàm xử lý lấy dữ liệu về từ trình duyệt
     */
    public function get($str, $type = int, $defaultValue = '') {
        return $_GET[$str];
    }

    private function lastday($month = '', $year = '') {
        if (empty($month))
            $month = date('m');
        if (empty($year))
            $year = date('Y');

        $result = strtotime("{$year}-{$month}-01");
        $result = strtotime('-1 second', strtotime('+1 month', $result));
        return date('d/m/Y', $result);
    }

    private function firstDay($month = '', $year = '') {
        if (empty($month))
            $month = date('m');
        if (empty($year))
            $year = date('Y');
        $result = strtotime("{$year}-{$month}-01");
        return date('d/m/Y', $result);
    }

    /**
     * @return int id
     */
    public static function getId($flag = false) {
        if ($flag === false)
            $id = $_GET['id'] ? $_GET['id'] : 0;
        else
            $id = $_POST['id'] ? $_POST['id'] : 0;
        return $id;
    }

    public static function loadKeyWords($content) {
        $params['content'] = Common::clearData($content, true);
        $params['encoding'] = 'utf-8';
        $params['lang'] = 'en';
        $params['ignore'] = array('zh', 'ja');
        $params['min_word_length'] = 4;
        $params['min_word_occur'] = 3;
        $params['min_2words_length'] = 4;
        $params['min_2words_phrase_length'] = 10;
        $params['min_2words_phrase_occur'] = 3;
        $params['min_3words_length'] = 4;
        $params['min_3words_phrase_length'] = 12;
        $params['min_3words_phrase_occur'] = 2;
        $keyword = new autokeyword($params);
        $k = $keyword->get_keywords();
        return $keyword->removeDuplicateKw($k);
    }

    public static function allowedDelete() {
//        Yii::app()->params['']
    }

    /**
     * Hàm lấy nhiều dữ liệu
     */
    public static function select($table = null, $fields, $where = null, $order = null, $limit = null) {
        $command = Yii::app()->db->createCommand('SELECT ' . $fields . ' FROM ' . $table . (($where !== null) ? ' WHERE ' . $where : '') . (($order !== null) ? ' ORDER BY ' . $order : '') . (($limit !== null) ? ' LIMIT ' . $limit : ''));
        $rs = $command->queryAll();
        return is_array($rs) ? $rs : null;
    }

    /**
     * Hàm lấy một bản ghi
     */
    public static function selectOne($table, $fields, $where = null) {
        $command = Yii::app()->db->createCommand('SELECT ' . $fields . ' FROM ' . $table . (($where !== null) ? ' WHERE ' . $where : '').' limit 0,1');
        $rs = $command->queryColumn();
        return is_array($rs) ? $rs : null;
    }

    /**
     * Hàm lấy nhiều dữ liệu thông qua cache
     */
    public static function getCacheData($table, $key = '', $fields, $where = null, $order=null, $limit=null) {
        $key = '_'.$key;
        $rs = Yii::app()->cache->get($key);
        if ($rs === false) {
            $rs = self::select($table, $fields, $where, $order, $limit);
            Yii::app()->cache->set($key, $rs, self::CACHE_TIME);
        }
        return is_array($rs) ? $rs : null;
    }

    /**
     * Hàm lấy một bản ghi thông qua cache
     */
    public static function getCacheOneData($table, $key = '', $fields, $where = null) {
        $key = '_'.$key;
        $rs = Yii::app()->cache->get($key);
        if ($rs === false) {
            $rs = self::selectOne($table, $fields, $where);
            Yii::app()->cache->set($key, $rs, self::CACHE_TIME);
        }
        return is_array($rs) ? $rs : null;
    }
    /**
     * Hàm thực hiện update một bản ghi
     */
    public static function update($table, $data, $where){
        if (!is_array($data) || ($size = sizeof($data)) == 0) throw new Exception('Empty update data or data not valid');
        $sql = 'UPDATE ' . $table . ' SET ';
		$index = 1;
        foreach ($data as $column => $value) {
			if ($value == 'NULL')
				$sql .= $column . '=NULL';
			else
				$sql .= $column . '=' . $value;
			if ($index !== $size)
				$sql .= ', ';
			++$index;
		}
        $sql .= ' WHERE ' . $where;
        $command = Yii::app()->db->createCommand($sql);
        $command->execute();
    }
    /**
     * Hàm xóa dữ liệu
     */
    public static function delete($table, $where, $limit = null) {
        $query = 'DELETE FROM ' . $table . ' WHERE ' . $where . (($limit !== null) ? ' LIMIT ' . $limit : '');
		$command = Yii::app()->db->createCommand($query);
        $command->execute();
        Yii::trace($query);
	}
    public static function setCache($key,$data,$time = 3600){
        Yii::app()->cache->set($key, $data, $time);
    }
    public static function getCache($key){
        return Yii::app()->cache->get($key);
    }

}

?>